
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Perry L Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  The plugin class.
//
///////////////////////////////////////////////////////////////////////////////

#include "SceneGraph/Plugins/Delegates/Qt/Plugin.h"
#include "SceneGraph/Qt/Viewer.h"

#include "Usul/Plugins/Helper.h"

using namespace SceneGraph::Plugins;

USUL_IMPLEMENT_IUNKNOWN_MEMBERS ( Plugin, BaseClass );
USUL_PLUGIN_INITIALIZE ( Plugin );


///////////////////////////////////////////////////////////////////////////////
//
//  Constructor.
//
///////////////////////////////////////////////////////////////////////////////

Plugin::Plugin() : BaseClass()
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

Plugin::~Plugin()
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Query for the interface.
//
///////////////////////////////////////////////////////////////////////////////

Usul::Interfaces::IUnknown *Plugin::queryInterface ( unsigned long iid )
{
  switch ( iid )
  {
  case Usul::Interfaces::IUnknown::IID:
  case Usul::Interfaces::IPlugin::IID:
    return static_cast < Usul::Interfaces::IPlugin * > ( this );
  case Usul::Interfaces::IViewCreate::IID:
    return static_cast < Usul::Interfaces::IViewCreate * > ( this );
  default:
    return 0x0;
  }
}


/////////////////////////////////////////////////////////////////////////////
//
//  Can we create the file?
//
/////////////////////////////////////////////////////////////////////////////

bool Plugin::canCreateView ( IUnknown::RefPtr ) const
{
  // This is the default delegate.
  return true;
}


/////////////////////////////////////////////////////////////////////////////
//
//  Create the document.
//
/////////////////////////////////////////////////////////////////////////////

void Plugin::createView ( QWidget *parent, IUnknown::RefPtr document, IUnknown::RefPtr caller )
{
  typedef SceneGraph::Qt::Viewer Viewer;
  Viewer::RefPtr viewer ( new Viewer ( parent, document, caller ) );
  viewer->lookAtAll();
}


/////////////////////////////////////////////////////////////////////////////
//
//  Return description string.
//
/////////////////////////////////////////////////////////////////////////////

std::string Plugin::pluginDescription() const
{
  return "Scene graph user-interface delegate based on Qt";
}
